#ifndef _URL_DEFINES_BFFDED58_4FFD_41A8_A631_76B08C7098AD_
#define _URL_DEFINES_BFFDED58_4FFD_41A8_A631_76B08C7098AD_
#pragma once
#include "base/file_path.h"
#include "googleurl/src/gurl.h"
#include "net/base/io_buffer.h"
#include "net/url_request/url_request_status.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_request_headers.h"

namespace dl {

// Symbol的key值
extern const char kRequestSymbol[];

// 下载文件未完成时的后缀名
extern const wchar_t kUndownExtension[];

using net::IOBufferWithSize;
typedef scoped_refptr<net::IOBufferWithSize> IOBufferWithSizePtr;

using net::URLRequestStatus;

// URL请求信息
struct URLRequestData {
  GURL                   request_url;   // 下载请求的URL地址
  FilePath               save_path;     // 资源保存的路径
  int64                  start_position;   // 资源开始下载位置
};

// HTTP请求的回复信息
struct Response : base::RefCountedThreadSafe<Response> {
  net::URLRequestStatus                    status;             // 返回的HTTP状态
  scoped_refptr<net::HttpResponseHeaders>  headers;            // HTTP返回头部信息
  base::Time                               request_time;       // 请求开始时间
  base::Time                               response_time;      // 请求结束时间
  int64                                    content_length;     // 内容长度
  int64                                    start_position;     // 开始下载的位置
};

typedef scoped_refptr<Response> ResponsePtr;


/**
 * 从URL请求中解析出HTTP附加头信息
 */
net::HttpRequestHeaders ResolveRequestExtraHeaders(const URLRequestData& data);

/**
 * 从请求回复头中解析下载起始位置
 */
int64 ResolveStartPositionFromResponseHeaders(const net::HttpResponseHeaders& headers);
 
}

#endif//_URL_DEFINES_BFFDED58_4FFD_41A8_A631_76B08C7098AD_
